iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Software Development

深入淺出設計模式 - 使用 C++系列 第 3

[Day 03] 把會變的部分封裝 - 策略模式 (Strategy Pattern)

  • 分享至 

  • xImage
  •  

策略模式 (Strategy Pattern)

  • Strategy pattern is a behavioral design pattern that allows the behavior of an object to be selected at runtime
  • The Strategy pattern is based on the idea of encapsulating algorithms into separate classes that implement a common interface
  • The pattern consists of three main components
    • Context
      • is the class that contains the object whose behavior needs to be changed dynamically
    • Strategy
      • is the interface or abstract class that defines the common methods for all the algorithms that can be used by the Context object
    • Concrete Strategy
      • is the class that implements the Strategy interface and provides the actual implementation of the algorithm

關鍵

  • (封裝) 找出應用程式中會變的部分,把他們和不會變的部分隔開
  • (執行期改變行為) 針對介面寫程式,而不是針對實作寫程式
  • (組合) 多用組合 (Composition),少用繼承
  • (整合) 將常改變的行為委託 (Delegate) 出去,而不是在類別(或子類別)裡面定義實作方法
    • 將行為變數宣告成介面型態
    • 使用 Setter (設定方法) 在執行期動態改變行為變數

經典實作範例 (與書本不同)

這是已完成策略模式的經典範例

https://ithelp.ithome.com.tw/upload/images/20230915/20138643GHsdDoxixc.jpg

建議有時間可以實際去閱讀書籍,從最原始的「濫用繼承」、誤用介面導致「重複的程式碼」,最後一步步提取出常改變的行為介面 (封裝),並用不同的類別 (Concrete Strategy) 來實作這些被封裝的演算法 (不同行為),每一個過程背後的分析與思考都很值得學習

Reference

[1]. https://www.geeksforgeeks.org/strategy-pattern-set-1/
[2]. https://www.geeksforgeeks.org/strategy-pattern-set-2/


上一篇
[Day 02] 讓你的物件掌握現況 - 觀察者模式 (Observer Pattern)
下一篇
[Day 04] 為愛用繼承的人設計一對眼睛 - 裝飾器模式 (Decorator Pattern)
系列文
深入淺出設計模式 - 使用 C++37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言